'use strict';

/**
 * 文件用途说明 : 程序主文件
 *
 * 项目名称 : nodejs-war
 * 作者姓名 : crixusshen
 * 创建日期 : 16/2/14
 * 修改日期 : 16/2/14
 * 版权所有 : 东方证券股份有限公司
 **/
var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var cache = {};

var server = http.createServer(function (request, response) {
    var filePath = false;
    var absPath;

    if(request.url == '/'){
        filePath = 'public/index.html';
    }
    else if(request.url.indexOf('jquery') != -1 || request.url.indexOf('socket.io') != -1){
        filePath = request.url;
    }
    else {
        filePath = 'public' + request.url;
    }

    absPath = './' + filePath;
    serveStatic(response, cache, absPath);
});
server.listen(3000, function () {
    console.log('Server listening on port 3000.');
});

var chatServer = require('./lib/chat_server');
chatServer.listen(server);

function send404(response){
    response.writeHead(404, {'Content-Type': 'text/plain'});
    response.write('Error 404: resource not found.');
    response.end();
}

function sendFile(response, filePath, fileContents){
    response.writeHead(200, {'Content-Type': mime.lookup(path.basename(filePath))});
    response.end(fileContents);
}

function serveStatic(response, cache, absPath){
    if(cache[absPath]){
        console.log('cache->'+absPath);
        sendFile(response, absPath, cache[absPath]);
    } else {
        fs.exists(absPath, function (exists) {
           if(exists){
               fs.readFile(absPath, function (err, data) {
                  if(err){
                      send404(response);
                  } else {
                      cache[absPath] = data;
                      console.log('non-cache->'+absPath);
                      sendFile(response, absPath, data);
                  }
               });
           } else {
               send404(response);
           }
        });
    }
}
